home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / T-TPUG Old Monthly Disks / (c)tn.d64 / disk utilities.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  9KB  |  291 lines

  1. 10 POKE53280,11:POKE53281,12:GOTO2770
  2. 20 PRINT"[147][151]                                        ";
  3. 30 PRINT"                                        [146]"
  4. 40 PRINT"[144]    DISK UTILITIES  BY DAN A. SIEBEN"
  5. 50 PRINT"    1 = SCRATCH (OR PURGE) PROGRAM"
  6. 60 PRINT"    2 = MERGE PROGRAMS":PRINT"    3 = RENAME PROGRAM"
  7. 70 PRINT"    4 = INITIALIZE DISK DRIVE":PRINT"    5 = FORMAT DISK"
  8. 80 PRINT"    6 = VALIDATE DISK"
  9. 90 PRINT"    7 = RENAME DISK":PRINT"    8 = WRITE-PROTECT DISK"
  10. 100 PRINT"    9 = PRINT DIRECTORY":PRINT"    0 = END"
  11. 110 PRINT"         ENTER COMMAND (0-9)"
  12. 120 GETA$:A=VAL(A$):IFA<0ORA>9ORA$=""THEN120
  13. 130 IFA=0THENA=10
  14. 140 ONAGOTO150,950,750,2270,640,840,2130,2010,2340,940
  15. 150 CLR:RESTORE:REM SCRATCH PROGRAM
  16. 160 PRINT"[147]"SPC(13)"SCRATCH PROGRAM"
  17. 170 PRINT"LOAD DISK CONTAINING PROGRAM TO BE":PRINT"SCRATCHED, IN DRIVE, THEN:"
  18. 180 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
  19. 190 GETA$:IFA$<>"S"ANDA$<>" "THEN190 
  20. 200 IFA$="S"THEN20
  21. 210 DR$="0":D=VAL(DR$):DR$="I"+DR$:OPEN15,8,15,DR$:GOSUB530
  22. 220 OPEN 1,8,3,"#":GOSUB540 
  23. 230 PRINT:PRINT "PRESS 'Y[146]' TO DELETE (OR PURGE) FILE":PRINT
  24. 240 Z$=CHR$(0)
  25. 250 T=18:S=1
  26. 260 PRINT#15,"U1:"3;D;T;S
  27. 270 PRINT#15,"B-P:"3;2+32*R
  28. 280 GET#1,A$:IF A$="" THEN A$=Z$
  29. 290 IF ASC(A$)<129 THEN390 
  30. 300 FOR K=5+32*R TO 20+32*R
  31. 310 PRINT#15,"B-P:"3;K
  32. 320 GET#1,A$:IF A$="" THEN PRINT" [146]";:GOTO340 
  33. 330 PRINT A$;
  34. 340 NEXT
  35. 350 PRINT ,,"PURGE ?  [146][157]";
  36. 360 GETA$:IFA$<>"Y" AND A$<>"N" THEN360
  37. 370 PRINT A$
  38. 380 IF A$="Y" THEN GOSUB480 
  39. 390 R=R+1:IF R<8 THEN260 
  40. 400 PRINT#15,"B-P:"3;0
  41. 410 GET#1,A$:IFA$="" THENA$=Z$
  42. 420 T=ASC(A$):IF T=0 THEN PRINT:PRINT "END OF DIRECTORY.":GOTO520 
  43. 430 PRINT#15,"B-P:"3;1
  44. 440 GET#1,A$:IFA$=""THENA$=Z$
  45. 450 S=ASC(A$):PRINT:PRINT "*** NEXT TRACK: ";:NU=T:GOSUB600:PRINT N$;
  46. 460 PRINT TAB(20);"NEXT SECTOR: ";:NU=S:GOSUB600 :PRINT N$;" ***":PRINT
  47. 470 R=0:GOTO260
  48. 480 PRINT#15,"B-P:"3;5+32*R-3
  49. 490 PRINT#1,CHR$(0);
  50. 500 PRINT#15,"U2:"3;D;T;S
  51. 510 GOSUB540:RETURN
  52. 520 CLOSE15:CLOSE1:GOTO910
  53. 530 REM CHECK DISK STATUS
  54. 540 INPUT#15,ER,ER$,TR,SE
  55. 550 IF ER=0 THEN RETURN
  56. 560 CLOSE 15:CLOSE 1
  57. 570 PRINT:PRINT "DISK ERROR! ";
  58. 580 PRINT ER;ER$;TR;SE
  59. 590 GOTO920
  60. 600 REM FORMAT (null)S
  61. 610 N$=MID$(STR$(NU),2)
  62. 620 IF LEN(N$)<2 THEN N$="0"+N$
  63. 630 RETURN
  64. 640 CLR:RESTORE:REM FORMAT DISK
  65. 650 PRINT"[147]            FORMATTING DISKS"
  66. 660 PRINT"REMEMBER: EVERYTHING ON THE DISK BEING  [197][197][197][197][197][197][197][197]  ";
  67. 670 PRINT"FORMATTED WILL BE DESTROYED.!"
  68. 680 PRINT"INSERT DISK DESIRED THEN:":PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
  69. 690 GETA$:IFA$<>"S"ANDA$<>" "THEN690
  70. 700 IFA$="S"THEN20
  71. 710 INPUT"WHAT IS THE DISK NAME";D$
  72. 720 PRINT:INPUT"WHAT IS THE DISK ID";E$
  73. 730 OPEN15,8,15:PRINT#15,"N8:";D$",";E$:CLOSE15,8,15
  74. 740 GOTO910
  75. 750 CLR:RESTORE:REM RENAMING PROGRAMS
  76. 760 PRINT"[147]"SPC(11)"RENAMING PROGRAMS"
  77. 770 PRINT"ENTER DISK CONTAINING PROGRAM TO BE":PRINT"RENAMED, THEN:"
  78. 780 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
  79. 790 GETA$:IFA$<>"S"ANDA$<>" "THEN790
  80. 800 IFA$="S"THEN20
  81. 810 INPUT"WHAT FILE IS TO BE RENAMED";B$:INPUT"WHAT IS THE NEW FILE NAME";C$
  82. 820 OPEN15,8,15:PRINT#15,"R8:";C$"=";B$:CLOSE15,8,15
  83. 830 GOTO910
  84. 840 CLR:RESTORE:REM VALIDATING DISK
  85. 850 PRINT"[147]"SPC(12)"VALIDATING DISK"
  86. 860 PRINT"INSERT DISK DESIRED, THEN:"
  87. 870 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP."
  88. 880 GETQ$:IFQ$<>" "ANDQ$<>"S"THEN880
  89. 890 IFQ$="S"THEN20
  90. 900 PRINT"VALIDATING........":OPEN15,8,15:PRINT#15,"V":CLOSE15,8,15:GOTO910
  91. 910 PRINT"COMPLETE.":GOTO930
  92. 920 PRINT"FUNCTION NOT COMPLETED!!"
  93. 930 FOREE=1TO4000:NEXT:GOTO20
  94. 940 END
  95. 950 CLR:RESTORE:REM MERGING PROGRAMS
  96. 960 DIMA(500),A$(500),N$(1)
  97. 970 MP=2049:PRINT"[147]"SPC(13)"MERGE PROGRAMS"
  98. 980 PRINT"ENTER DISK CONTAINING BOTH PROGRAMS":PRINT"TO BE MERGED, THEN:   [197][197][197][197]
  99. 990 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP."
  100. 1000 [161]A$:[139]A$[179][177]"S"[175]A$[179][177]" "[167]1000
  101. 1010 [139]A$[178]"S"[167]20
  102. 1020 [133]"NAME OF ORIGINAL PROGRAM";N$(0)
  103. 1030 [153]:[133]"NAME OF PROGRAM TO MERGE";N$(1)
  104. 1040 S$[178]N$(0)
  105. 1050 [133]"SAVE UNDER WHAT NAME";S$
  106. 1060 [159]15,8,15
  107. 1070 [152]15,"I"
  108. 1080 X[178]0:[141]1180:E1[178]P[171]1:P2[178]P:X[178]1:[141]1180:E2[178]P[171]1
  109. 1090 [153]"SAVING ";S$
  110. 1100 [159]2,8,2,"@0:"[170]S$[170]",P,W":[141]1350
  111. 1110 [152]2,[199](1);[199](8);
  112. 1120 [139]A(P2)[178]A(P1)[167]Z[178]P1:P1[178]P1[170]1:P2[178]P2[170]1:[137]1150
  113. 1130 [139]A(P2)[179]A(P1)[167]Z[178]P2:P2[178]P2[170]1:[137]1150
  114. 1140 [139]A(P2)[177]A(P1)[167]Z[178]P1:P1[178]P1[170]1
  115. 1150 MP[178]MP[170][195](A$(Z))[170]2:X[178][181](MP[173]256):Y[178]MP[171]256[172]X
  116. 1160 [152]2,[199](Y);[199](X);A$(Z);:[139]P1[179]E1[176]P2[179]E2[167]1120
  117. 1170 [152]2,[199](0);[199](0);:[160]2:[160]15:[137]910
  118. 1180 [153]"LOADING "N$(X)
  119. 1190 [159]2,8,2,"0:"[170]N$(X)[170]",P,R"
  120. 1200 [141]1350
  121. 1210 [161]#2,A$,B$
  122. 1220 [161]#2,A$,B$
  123. 1230 [139]A$[178]""[175]B$[178]""[167]A(P)[178]65000:P[178]P[170]1:[160]2:[142]
  124. 1240 [161]#2,A$
  125. 1250 [139]A$[178]""[167]A$[178][199](0)
  126. 1260 X[178][198](A$):A$(P)[178]A$
  127. 1270 [161]#2,A$
  128. 1280 [139]A$[178]""[167]A$[178][199](0)
  129. 1290 A(P)[178]X[170]256[172][198](A$):A$(P)[178]A$(P)[170]A$
  130. 1300 [161]#2,A$
  131. 1310 [139]A$[178]""[167]A$[178][199](0)
  132. 1320 A$(P)[178]A$(P)[170]A$:[139]A$[179][177][199](0)[167]1300
  133. 1330 P[178]P[170]1
  134. 1340 [137]1220
  135. 1350 [132]15,EN,EM$,ET,ES
  136. 1360 [139]EN[178]0[167][142]
  137. 1370 [153]"DISK ERROR"
  138. 1380 [153]EN;EM$;ET;ES
  139. 1390 [160]2:[160]15
  140. 1400 [137]920
  141. 1410 [156]:[140]:[143] PRINT DIRECTORY
  142. 1420 [153]"LOAD"[166]11)"PRINT DIRECTORIES":[153]"INSERT DISK DESIRED, THEN:"
  143. 1430 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP."
  144. 1440 [161]Q$:[139]Q$[179][177]" "[175]Q$[179][177]"S"[167]1440
  145. 1450 [139]Q$[178]"S"[167]20
  146. 1460 [139]Y[178]2[176]Y[178]3[167]2430
  147. 1470 [134]FX$(256),FT$(256),FL(256),TT(256):N[178][171]1:[129]I[178]1[164]256:FX$(I)[178]"":[130]:X[178]221
  148. 1480 BL$[178]" ":[129]I[178]1[164]40:BL$[178]BL$[170]"CLOSE":[130]:[160]15:[159]15,8,15:[159]1,8,0,"$0"
  149. 1490 [141]1870:[161]#1,A$,B$
  150. 1500 W[178]51:L$[178]"":[133]"PRINTOUT HEADER";L$
  151. 1510 [139][195](L$)[177]22[167][153]"HEADER TOO LONG-MAXIMUM 22 CHARACTERS.":[137]1500
  152. 1520 [161]#1,A$,B$:[161]#1,A$,B$:C[178]0:[139]A$[179][177]""[167]C[178][198](A$)
  153. 1530 [139]B$[179][177]""[167]C[178]C[170][198](B$)[172]256
  154. 1540 N[178]N[170]1:FL(N)[178]C
  155. 1550 [161]#1,B$:[139]ST[179][177]0[167]1640
  156. 1560 [139]B$[179][177][199](34)[167]1550
  157. 1570 N$[178]""
  158. 1580 [161]#1,B$:[139]B$[179][177][199](34)[167]N$[178]N$[170]B$:[137]1580
  159. 1590 FX$(N)[178]N$
  160. 1600 [161]#1,B$:[139]B$[178][199](32)[167]1600
  161. 1610 C$[178]""
  162. 1620 C$[178]C$[170]B$:[161]#1,B$:[139]B$[179][177]""[167]1620
  163. 1630 FT$(N)[178][200](C$,3):[139]ST[178]0[167]1520
  164. 1640 [160]1:BF[178]FL(N):N[178]N[171]1:[143] GOSUB1910
  165. 1650 [133]"ALPHABETICALLY SORTED (Y/N)   CMDCMDCMD";G$
  166. 1660 [139]G$[179][177]"N"[175]G$[179][177]"Y"[167][153]"ONON";:[137]1650
  167. 1670 [141]1970
  168. 1680 [160]3:[159]3,4:[153]"PRINTING DIRECTORY"
  169. 1690 [152]3,[199](176);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](174)
  170. 1700 [152]3,[199](X);[166]51);[199](X)
  171. 1710 T2$[178]FX$(0):[139]L$[179][177]""[167]T2$[178]T2$[170]" CLOSE("[170]L$[170]")"
  172. 1720 T$[178][199](X)[170]"     >>> "[170]FX$(0)
  173. 1730 [139]L$[178]""[167]T$[178]T$[170][202](BL$,1,W[171][195](T$)[171]1):[137]1750
  174. 1740 K[178]W[171]2[171][195](T$)[171][195](L$):T$[178]T$[170][202](BL$,1,K[171]1)[170]"("[170]L$[170]")"
  175. 1750 T$[178]T$[170]"  "[170][199](X):[152]3,T$
  176. 1760 [152]3,[199](X);[166]51);[199](X)
  177. 1770 [152]3,[199](171);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](179)
  178. 1780 [152]3,[199](X);[166]51);[199](X):L[178]9:K[178][181]((N[170]1)[173]2):[129]I[178]1[164]K
  179. 1790 T$[178][199](X):J[178]I:[141]1910:T$[178]T$[170]" ":J[178]K[170]I:[141]1910:T$[178]T$[170]"  "[170][199](X)
  180. 1800 [152]3,T$:L[178]L[170]1:[130]:[152]3,[199](X);[166]51);[199](X)
  181. 1810 P[178][181]((BF[172]100[173]664)[170].5):P$[178][202]([196](P),2)
  182. 1820 T$[178][199](X)[170][202](BL$,1,14)[170][196](BF)[170]" BLOCKS ("[170]P$[170]"%) FREE"
  183. 1830 T$[178]T$[170][202](BL$,1,W[171][195](T$)[170]1)[170][199](X):[152]3,T$
  184. 1840 [129]I[178]L[164]27:[152]3,[199](X);[166]51);[199](X):[130]
  185. 1850 [152]3,[199](173);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](189)
  186. 1860 [152]3:[160]3:[160]15:[137]910
  187. 1870 [132]15,ER,ER$:[139]ER[179]20[167][142]
  188. 1880 [139]EF[178]74[176]ER[178]21[167]ER$[178]ER$[170]"--IS DISK INSERTED?":[137]1900
  189. 1890 ER$[178]"DISK ERROR"[170][196](ER)[170]": "[170]ER$
  190. 1900 [153]ER$:[137]920
  191. 1910 T[178]TT(J):[139]T[178]0[167]T$[178]T$[170][202](BL$,1,24):[142]
  192. 1920 [139]FL(T)[179]100[167]T$[178]T$[170]"CLOSE"
  193. 1930 [139]FL(T)[179]10[167]T$[178]T$[170]"CLOSE"
  194. 1940 T$[178]T$[170][202]([196](FL(T)),2)[170]"CLOSE"[170]FX$(T)
  195. 1950 [139][195](FX$(T))[179]16[167]T$[178]T$[170][202](BL$,1,16[171][195](FX$(T)))
  196. 1960 T$[178]T$[170]"CLOSE"[170][200](FT$(T),3):[142]
  197. 1970 [129]I[178]1[164]N:TT(I)[178]I:[130]:[139]G$[178]"N"[167][142]
  198. 1980 [129]I[178]1[164]N[171]1:S[178]I:[129]J[178]I[170]1[164]N:[139]FX$(TT(J))[179]FX$(TT(S))[167]S[178]J
  199. 1990 [130]J:[139]S[179][177]I[167]T[178]TT(I):TT(I)[178]TT(S):TT(S)[178]T
  200. 2000 [130]I:[142]
  201. 2010 [156]:[140]:[143] DISK PROTECTION
  202. 2020 [153]"LOAD"[166]11)"WRITE-PROTECT DISK"
  203. 2030 [153]"NOTE: A WRITE-PROTECTED DISKS DOES NOT"
  204. 2040 [153]"ALLOW ANY SAVES TO IT, AND ONLY REFOR-  MATTING WILL REVERSE IT."
  205. 2050 [153]"INSERT DISK TO WRITE-PROTECT, THEN:"
  206. 2060 [153]"'SPACE' TO BEGIN OR 'S' TO STOP."
  207. 2070 [161]A$:[139]A$[179][177]" "[175]A$[179][177]"S"[167]2070
  208. 2080 [139]A$[178]"S"[167]20
  209. 2090 [159]15,8,15,"I":[159]8,8,8,"#"
  210. 2100 [152]15,"UA:8,0,18,0":[152]15,"B-P:8,2"
  211. 2110 [152]8,[199](1);:[152]15,"UB,8,0,18,0"
  212. 2120 [152]15,"I":[160]8:[160]15:[137]910
  213. 2130 [156]:[140]:[143] RENAME DISK
  214. 2140 [153]"LOAD"[166]14)"RENAME DISK"
  215. 2150 [153]"ENTER DISK TO BE RENAMED, THEN:"
  216. 2160 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP."
  217. 2170 [161]A$:[139]A$[179][177]"S"[175]A$[179][177]" "[167]2170
  218. 2180 [139]A$[178]"S"[167]20
  219. 2190 [159]15,8,15:[159]2,8,2,"#":[141]2240:NN$[178]DN$
  220. 2200 [133]"NEW NAME";NN$:[139][195](NN$)[177]16[167][153][163]14)"TOO LONG!WAIT":[137]2200
  221. 2210 NN$[178]NN$[170]"CLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSE":[152]15,"B-P";2;144
  222. 2220 [152]2,[200](NN$,16);:[152]15,"U2:";2;0;18;0:[141]2240
  223. 2230 [152]15,"IO":[160]2:[160]15:[137]910
  224. 2240 [152]15,"U1:";2;0;18;0:[152]15,"B-P:";2;144:DN$[178]""
  225. 2250 [129]I[178]1[164]16:[161]#2,A$:DN$[178]DN$[170]A$:[130]
  226. 2260 [153]"DISK NAME IS: "DN$:[142]
  227. 2270 [156]:[140]:[143] INITIALIZING DISK
  228. 2280 [153]"LOAD"[166]8)"INITIALIZING DISK DRIVE"
  229. 2290 [153]"THIS WILL RESTORE THE DISK DRIVE TO ITS ORIGINAL POWER-ON STATE.  SIM
  230. 2300 PRINT"HIT 'SPACE' TO EXECUTE OR 'S' TO STOP."
  231. 2310 GETQ$:IFQ$<>" "ANDQ$<>"S"THEN2310
  232. 2320 IFQ$="S"THEN20
  233. 2330 PRINT"INITIALIZING........":OPEN15,8,15:PRINT#15,"I":CLOSE15,8,15:GOTO910
  234. 2340 CLR:RESTORE:REM PRINT DIRECTORY
  235. 2350 PRINT"[147]"SPC(11)"PRINT DIRECTORIES"
  236. 2360 PRINT"THIS PROGRAM WILL ALPHABETIZE AND PRINT"
  237. 2370 PRINT"THE DIRECTORY OF ANY DISK.  CHOOSE ONE:"
  238. 2380 PRINT"   1 = PRINT DISK SIZE ON PRINTER":PRINT"   2 = PRINT SHEET FORM";
  239. 2390 PRINT" ON PRINTER":PRINT"   3 = PRINT ON SCREEN":PRINT"   4 = RETURN TO MAIN MENU"
  240. 2400 GETA$:IFA$<"1"ORA$>"4"ORA$=""THEN2400
  241. 2410 Y=VAL(A$):ONYGOTO1410,2420,2420,20
  242. 2420 GOTO1420
  243. 2430 PRINT"[145]USE 'SHIFT' KEY TO SLOW PRINTING, OR HIT'SHIFT LOCK' TO STOP IT."
  244. 2440 PRINT"READING THE DIRECTORY":DIMF$(144):B=6:C=2:Q$=CHR$(34):R$=""
  245. 2450 SP$="                 "
  246. 2460 OPEN1,8,0,"$":GET#1,A$,B$
  247. 2470 GET#1,A$,B$:GET#1,A$,B$:NB=ASC(A$+CHR$(0))+256*ASC(B$+CHR$(0))
  248. 2480 GET#1,B$:IFST<>0THEN2560
  249. 2490 IFB$<>CHR$(34)THEN2480
  250. 2500 GET#1,B$:IFB$<>CHR$(34)THENS$=S$+B$:GOTO2500
  251. 2510 GET#1,B$:IFB$=CHR$(32)THEN2510
  252. 2520 C$="":IFA=0THENC$=" "
  253. 2530 C$=C$+B$:GET#1,B$:IFB$<>""THEN2530
  254. 2540 F$(A)=LEFT$(R$+Q$+S$+Q$+SP$,19)+LEFT$(C$,B)+MID$(STR$(NB)+SP$,2,C)
  255. 2550 S$="":R$="":A=A+1:B=3:C=5:IFST=0THEN2470
  256. 2560 CLOSE1:N=A-1:BF$=MID$(STR$(NB)+" BLOCKS FREE,"+STR$(N)+" FILES.",2)
  257. 2570 INPUT"ALPHABETICALLY SORTED (Y/N)   [157][157][157]";G$:IFG$="N"THEN2680
  258. 2580 IFG$<>"Y"THENPRINT"[145][145]";:GOTO2570
  259. 2590 M=N
  260. 2600 M=INT(M/2):IFM=0THEN2680
  261. 2610 J=1:K=N-M
  262. 2620 I=J
  263. 2630 L=I+M:CM=CM+1:IFF$(I)<F$(L)THEN2660
  264. 2640 T$=F$(I):F$(I)=F$(L):F$(L)=T$:SW=SW+1:I=I-M:IFI<1THEN2660
  265. 2650 GOTO2630
  266. 2660 J=J+1:IFJ>KTHEN2600
  267. 2670 GOTO2620
  268. 2680 IFY=2THENOPEN4,4:PRINT"PRINTING DIRECTORY":CMD4
  269. 2690 IFY=3THENPRINT"[147]"
  270. 2700 C=2:FORI=0TON:PRINTRIGHT$(F$(I),C)LEFT$(F$(I),LEN(F$(I))-C):C=5
  271. 2710 IFPEEK(653)THEN2710
  272. 2720 NEXT:PRINTBF$:IFY=2THENPRINT:PRINT:PRINT:PRINT#4:CLOSE4:GOTO2760
  273. 2730 PRINT"HIT ANY KEY TO RETURN TO THE MAIN MENU."
  274. 2740 GETY$:IFY$=""THEN2740
  275. 2750 GOTO20
  276. 2760 GOTO910
  277. 2770 VE=0:PRINT"[147]";
  278. 2780 PRINT"[151]                                        ";
  279. 2790 PRINT"                                        [146]"
  280. 2800 M$="DISK UTILITIES                  "
  281. 2810 PRINT"[144]";:FORX=1TOLEN(M$)
  282. 2820 QQ=ASC(MID$(M$,X,1)):IFQQ=46ORQQ=32THENK=K+1:CH=QQ:GOTO2840
  283. 2830 FORCH=64TOQQ:REMASC(MID$(M$,X,1))
  284. 2840 IFQQ=46THENCH=46
  285. 2850 IFCH>127ANDCH<>46ANDCH<160THENCH=160
  286. 2860 POKE214,VE:PRINT
  287. 2870 PRINTTAB(X+(39-LEN(M$))/2);
  288. 2880 PRINTCHR$(CH);:IFK>0THENK=0:NEXTX:GOTO2990
  289. 2890 NEXTCH,X
  290. 2990 PRINT"BY DAN A. SIEBEN":GOTO50
  291.